/**
 * @ngdoc config
 * @name config
 * @description
 * # Application_NG：配置
 *   http拦截器；
 */
(function() {
    'use strict';
    appModule.config([
        '$httpProvider', '$compileProvider',
        function($httpProvider, $compileProvider) {

            $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|http|javascript|weboffice):/);

            /* http拦截器 */
            var interceptors = [
                '$q', 'appServices', 'functionServices',
                function($q, appServices, functionServices) {
                    return {
                        //接收一个参数，它是 $http 中的标准 config 对象，同时也需要返回一个标准 config ，此时可以添加各类身份验证信息
                        request: function(config) {
                            config.headers = config.headers || {};
                            config.headers["Access-Control-Allow-Origin"] = '*';
                            if (functionServices.getCookie('apiKey')) {
                                config.headers['Authorization'] = 'Bearer ' + functionServices.getCookie('apiKey');
                            }
                            // console.log('a1',config);
                            return config;
                        },
                        //当有多个 Interceptor 的时候， requestError 会在前一个 Interceptor 抛出错误或者执行 $q.reject() 时执行，接收的参数就对应的错误
                        requestError: function(err) {
                            appServices.httpErrorAlert(err);
                            // console.log('a2',err);
                            return $q.reject(err);
                        },
                        //接受一个请求对象参数，可以不处理就直接返回，当然，如果后端 API 返回自定义错误时，HTTP 的状态码仍然是 200 得话，便在这里处理自定义错误，也可以对返回数据做一些处理
                        response: function(res) {
                            // console.log('b1',res);
                            return res;
                        },
                        //处理标准的 Http 错误，如服务器没有响应时，或者 PHP 之类的 CGI 经常出现的 502 一类，还可以处理 HTTP 状态码不是 200 的各类自定义错误
                        responseError: function(err) {
                            appServices.httpErrorAlert(err);
                            // console.log('b2',err);
                            return $q.reject(err);
                        }
                    }; //上面四个中，前两个是请求的前置处理，后两个是针对请求的响应的处理
                }
            ];
            $httpProvider.defaults.withCredentials = true; //允许Cookie提交   资料：https://www.linuxidc.com/Linux/2014-08/105709.htm
            $httpProvider.interceptors.push(interceptors);




        }
    ]);
})();